/**
 * 端口服务模块
 * 处理端口配置、检查和重启相关功能
 */

/**
 * 获取当前应用配置
 */
export const getAppConfig = () => {
  try {
    const savedConfig = localStorage.getItem('app-config');
    if (savedConfig) {
      return JSON.parse(savedConfig);
    }
    return {
      port: 1430,
      apiUrl: 'https://api.jisuapi.com',
      autoStart: true,
      enableCache: true
    };
  } catch (error) {
    console.error('获取配置失败:', error);
    return null;
  }
};

/**
 * 保存应用配置
 */
export const saveAppConfig = (config) => {
  try {
    localStorage.setItem('app-config', JSON.stringify(config));
    return true;
  } catch (error) {
    console.error('保存配置失败:', error);
    return false;
  }
};

/**
 * 检查端口是否可用
 * 注意：在浏览器环境中，我们无法直接检查端口可用性
 * 这里提供一个基础的端口范围验证
 */
export const checkPortAvailability = async (port) => {
  try {
    // 基础端口范围检查
    if (!port || port < 1024 || port > 65535) {
      return {
        available: false,
        message: '端口号应在 1024-65535 范围内'
      };
    }

    // 检查常用端口冲突
    const commonPorts = [1430, 8080, 8000, 5000, 3001, 4000];
    if (commonPorts.includes(port)) {
      return {
        available: true,
        message: `端口 ${port} 是常用开发端口，可能被其他应用占用`,
        warning: true
      };
    }

    return {
      available: true,
      message: `端口 ${port} 可以使用`
    };
  } catch (error) {
    console.error('端口检查失败:', error);
    return {
      available: false,
      message: '端口检查失败'
    };
  }
};

/**
 * 获取推荐的可用端口列表
 */
export const getRecommendedPorts = () => {
  return [3001, 3002, 3003, 8081, 8082, 8083, 5001, 5002, 5003, 4001, 4002, 4003];
};

/**
 * 重启应用服务
 * 在浏览器环境中，我们无法直接重启服务器
 * 这里提供重启提示和配置应用功能
 */
export const restartAppService = async (newPort) => {
  try {
    const currentConfig = getAppConfig();
    
    if (!currentConfig) {
      throw new Error('无法获取当前配置');
    }

    // 更新配置中的端口
    const updatedConfig = {
      ...currentConfig,
      port: newPort,
      lastRestart: new Date().toISOString()
    };

    // 保存新配置
    const saved = saveAppConfig(updatedConfig);
    
    if (!saved) {
      throw new Error('保存配置失败');
    }

    return {
      success: true,
      message: `端口已更新为 ${newPort}，请手动重启开发服务器`,
      config: updatedConfig,
      restartCommand: `npm run dev -- --port ${newPort}`
    };
  } catch (error) {
    console.error('重启服务失败:', error);
    return {
      success: false,
      message: error.message || '重启服务失败'
    };
  }
};

/**
 * 生成重启命令
 */
export const generateRestartCommand = (port) => {
  return {
    npm: `npm run dev -- --port ${port}`,
    yarn: `yarn dev --port ${port}`,
    pnpm: `pnpm dev --port ${port}`
  };
};

/**
 * 检查当前运行端口
 */
export const getCurrentRunningPort = () => {
  try {
    // 从当前URL获取端口
    const currentPort = window.location.port;
      return currentPort ? parseInt(currentPort) : 1430;
  } catch (error) {
    console.error('获取当前端口失败:', error);
    return 1430;
  }
};

/**
 * 比较配置端口和运行端口
 */
export const compareConfigAndRunningPort = () => {
  const config = getAppConfig();
  const runningPort = getCurrentRunningPort();
    const configPort = config ? config.port : 1430;

  return {
    configPort,
    runningPort,
    needsRestart: configPort !== runningPort,
    message: configPort !== runningPort 
      ? `配置端口 ${configPort} 与运行端口 ${runningPort} 不一致，需要重启`
      : `端口配置正常 (${runningPort})`
  };
};